金融市场产生海量时间序列数据——股价、成交量、收益率等。
for循环、while循环与循环控制语句| 模式 | 含义 | 金融场景适用性 |
|---|---|---|
| 迭代 | 重复执行相同操作 | ✅ 时间序列天然顺序性 |
| 递归 | 函数调用自身 | ❌ 内存消耗大 |
for循环用于遍历列表、元组、字符串等可迭代对象。
语法结构:
item:每次迭代取出的当前元素iterable:被遍历的序列对象# ==================== 示例1:遍历列表 ====================
stocks = ['中信证券', '国泰君安', '海通证券']
for stock in stocks:
print(f'分析股票: {stock}')
# ==================== 示例2:遍历字符串 ====================
code = '600519.SH'
for char in code:
print(char, end=' ')
print()
# ==================== 示例3:遍历范围 ====================
for i in range(5):
print(f'第{i+1}次迭代')
# ==================== 示例4:遍历字典 ====================
stock_info = {'name': '中信证券', 'code': '600030.SH', 'price': 24.78}
for key in stock_info:
print(f'{key}: {stock_info[key]}')分析股票: 中信证券
分析股票: 国泰君安
分析股票: 海通证券
6 0 0 5 1 9 . S H
第1次迭代
第2次迭代
第3次迭代
第4次迭代
第5次迭代
name: 中信证券
code: 600030.SH
price: 24.78
range()是循环中最常用的工具,用于生成整数序列。
三种调用方式:
| 语法 | 说明 | 示例 |
|---|---|---|
range(stop) |
从0到stop-1 | range(5) → 0,1,2,3,4 |
range(start, stop) |
从start到stop-1 | range(2020, 2025) |
range(start, stop, step) |
指定步长 | range(0, 10, 2) |
i = 0 i = 1 i = 2 i = 3 i = 4
年份: 2020
年份: 2021
年份: 2022
年份: 2023
年份: 2024
偶数: 0 偶数: 2 偶数: 4 偶数: 6 偶数: 8
倒计时: 10 倒计时: 9 倒计时: 8 倒计时: 7 倒计时: 6 倒计时: 5 倒计时: 4 倒计时: 3 倒计时: 2 倒计时: 1
np.arange可生成日期范围,常用于时间序列分析for循环可逐日处理金融数据while循环在条件为True时重复执行,适用于不确定迭代次数的情况。
语法结构:
False价格监控模拟:
第1天, 价格: 18.50元
第2天, 价格: 19.00元
第3天, 价格: 19.50元
第4天, 价格: 20.00元
达到目标价20元, 耗时4天
使用while循环时,必须确保:
False
count += 1 或 price += 0.5if days > 100: breakbreak语句立即跳出最内层循环,不执行循环体剩余代码。
执行逻辑:
break时,立即退出循环执行过程追踪:
0.0192 → 不满足 < -0.01,继续-0.0001 → 不满足,继续0.006 → 不满足,继续0.0074 → 不满足,继续-0.0127 → 满足! 执行break跳出关键知识点: 循环变量i在循环外仍可访问,保持最后一次赋值
| 场景 | 说明 |
|---|---|
| 止损触发 | 价格触及止损位立即平仓 |
| 异常检测 | 发现异常数据停止处理 |
| 目标达成 | 达到盈利目标退出监控 |
break立即跳出最内层循环continue语句跳过当前迭代的剩余代码,直接进入下一次迭代。
正收益交易日:
第1个正收益日: 1.92%
第2个正收益日: 0.60%
第3个正收益日: 0.74%
第4个正收益日: 0.95%
总计正收益日: 4天
| 关键字 | 作用 | 后续代码 | 循环是否继续 |
|---|---|---|---|
break |
跳出整个循环 | 不执行 | ❌ 否 |
continue |
跳过本次迭代 | 不执行 | ✅ 是 |
break:发现目标或异常,停止循环continue:过滤数据,跳过不需要处理的部分Python循环可以带else子句:循环正常结束时执行,被break中断时不执行。
所有股票价格都在合理范围
==================================================
发现高价股票
elsebreak中断(发现异常)→ 跳过else综合运用for循环、if条件判断、break语句:
import numpy as np
# 模拟一周股价数据
np.random.seed(42)
base_price = 20.0
price_changes = np.random.randn(5) * 0.5
prices = base_price + np.cumsum(price_changes)
print('=' * 60)
print('股价涨跌幅监控系统')
print('=' * 60)
alert_threshold = -0.01 # 跌幅超过-1%触发警报
for i, price in enumerate(prices, 1):
if i == 1:
daily_return = 0
else:
daily_return = (price - prices[i-2]) / prices[i-2]
return_pct = daily_return * 100
if daily_return < alert_threshold:
status = '⚠️ 警告'; action = '考虑减仓'
elif daily_return > 0.01:
status = '✓ 上涨'; action = '继续持有'
else:
status = '正常'; action = '观望'
print(f'\n第{i}天:')
print(f' 收盘价: {price:.2f}元')
print(f' 涨跌幅: {return_pct:+.2f}%')
print(f' 状态: {status} 建议: {action}')
if daily_return < alert_threshold:
print('\n' + '=' * 60)
print('触发风险预警,系统暂停监控')
print('=' * 60)
break
else:
print('\n' + '=' * 60)
print('一周监控结束,市场表现平稳')
print('=' * 60)============================================================
股价涨跌幅监控系统
============================================================
第1天:
收盘价: 20.25元
涨跌幅: +0.00%
状态: 正常 建议: 观望
第2天:
收盘价: 20.18元
涨跌幅: -0.34%
状态: 正常 建议: 观望
第3天:
收盘价: 20.50元
涨跌幅: +1.60%
状态: ✓ 上涨 建议: 继续持有
第4天:
收盘价: 21.26元
涨跌幅: +3.71%
状态: ✓ 上涨 建议: 继续持有
第5天:
收盘价: 21.15元
涨跌幅: -0.55%
状态: 正常 建议: 观望
============================================================
一周监控结束,市场表现平稳
============================================================
处理多只股票 × 多个交易日的数据时,需要使用嵌套循环。
执行逻辑:
returns = [
[0.01, 0.02, -0.01, 0.03, 0.02], # 股票A
[0.02, -0.01, 0.03, 0.01, -0.02], # 股票B
[-0.01, 0.03, 0.02, -0.02, 0.01] # 股票C
]
stock_names = ['股票A', '股票B', '股票C']
print('每日正收益股票统计:\n')
for day in range(5):
positive_count = 0
positive_stocks = []
for stock_idx in range(3):
if returns[stock_idx][day] > 0:
positive_count += 1
positive_stocks.append(stock_names[stock_idx])
print(f'第{day+1}天: {positive_count}只上涨 → {", ".join(positive_stocks)}')每日正收益股票统计:
第1天: 2只上涨 → 股票A, 股票B
第2天: 2只上涨 → 股票A, 股票C
第3天: 2只上涨 → 股票B, 股票C
第4天: 2只上涨 → 股票A, 股票B
第5天: 2只上涨 → 股票A, 股票C
import time
import numpy as np
n = 100000
list1 = list(range(n))
list2 = list(range(n))
# 方法1:Python for循环
start = time.time()
result_loop = []
for i in range(n):
result_loop.append(list1[i] + list2[i])
loop_time = time.time() - start
# 方法2:列表推导
start = time.time()
result_listcomp = [list1[i] + list2[i] for i in range(n)]
listcomp_time = time.time() - start
# 方法3:zip+列表推导
start = time.time()
result_zip = [a + b for a, b in zip(list1, list2)]
zip_time = time.time() - start
# 方法4:NumPy向量化
arr1 = np.array(list1)
arr2 = np.array(list2)
start = time.time()
result_numpy = arr1 + arr2
numpy_time = time.time() - start
print(f'Python循环: {loop_time:.4f}秒')
print(f'列表推导: {listcomp_time:.4f}秒')
print(f'zip方法: {zip_time:.4f}秒')
print(f'NumPy向量化: {numpy_time:.4f}秒')
safe_numpy_time = numpy_time if numpy_time > 0 else 1e-12
print(f'\n最快方法比最慢快 {loop_time/safe_numpy_time:.1f}倍')
#print(f'\n最快方法比最慢快 {loop_time/numpy_time:.1f}倍')Python循环: 0.0133秒
列表推导: 0.0104秒
zip方法: 0.0040秒
NumPy向量化: 0.0000秒
最快方法比最慢快 13308763504.0倍
| 方法 | 速度 | 适用场景 |
|---|---|---|
for循环 |
最慢 | 简单逻辑、学习阶段 |
| 列表推导 | 较快 | 中等规模数据 |
zip+推导 |
较快 | 多列表并行操作 |
| NumPy向量化 | 最快 | 大规模金融数据(推荐) |
| 知识点 | 关键语法 | 金融场景 |
|---|---|---|
for循环 |
for x in seq: |
遍历股票列表 |
while循环 |
while cond: |
价格监控 |
break |
跳出循环 | 止损触发 |
continue |
跳过当前迭代 | 过滤异常数据 |
for-else |
正常结束执行else | 数据完整性验证 |
| 嵌套循环 | 双层for |
多股票多日分析 |
[商业大数据分析与应用]